<?
/*
-------------------------------
Script - EvaGb
-------------------------------
File - editmsg.php
-------------------------------
Function - Модуль админцентра, редактор сообщений
-------------------------------
*/

include_once "{$GLOBALS['_gb_cnf']['dir']}/sis/inc/pager_inc.php";
include_once "{$GLOBALS['_gb_cnf']['dir']}/sis/inc/replace_inc.php";
class admin_modul {
    public  $error,$result;
    private $db,$tpl,$adm,$n;
    function __construct() {
        $this->db=locator::get()->db();
        $this->tpl=locator::get()->tpl();
        $this->adm=locator::get()->save['admin'];
        $this->n=filter($_GET['n'],'0-9');
        $_SESSION['em_onpage']=!$_SESSION['em_onpage']?20:$_SESSION['em_onpage'];
        $_SESSION['em_sorter']=!$_SESSION['em_sorter']?"P.data DESC":$_SESSION['em_sorter'];
        if (!$this->user_request()) {
            $this->result=$this->tpl();
        }
    }
    private function user_request() {
        if (!$_POST['action'] && !$_POST['select']) {
            if (isset($_POST['sort']) || isset($_POST['onpage'])) {
                $this->set_sorter();
                $this->set_onpage();
                header("Refresh:0");die();
            }
        }else {
            if (!empty($_POST['action']) && !empty($_POST['select'])) {
                $this->update();
                return true;
            }else {
                $this->error="Ошибка: Нужно выбрать хотябы одно сообщение и действие над ним";
            }
        }
        return false;
    }
    private function update() {
        $sel=$_POST['select'];
        switch($_POST['action']) {
            case"del":
               $z=0;
               for($i=0,$c=count($sel);$i<$c;$i++) {
                   if (!$this->adm->delpost($sel[$i])) {
                       break;
                   }
                   $z++;
               }
            $this->error=$z==count($sel)?"Все <b>$z</b> сообщений успешно удалены":"Ошибка: Удалено только <b>$z</b> из <b>".count($sel)."</b> сообщений";
            header("Refresh:2");
            break;
             case"ban":
               $z=0;$s=true;
               if($_POST['time']) {
                 if(!preg_match("#[^0-9]+#i",$_POST['time'])) {
                   $time=time()+$_POST['time']*(3600*24);
                    for($i=0,$c=count($sel);$i<$c;$i++) {
                       if (!$this->adm->ban($sel[$i],$time)) {
                           break;
                       }
                       $z++;
                    }
                    $s=false;
                    $this->error=$z==count($sel)?"Все <b>$z</b> пользователей забанены":"Ошибка: Забанено только <b>$z</b> из <b>".count($sel)."</b> пользователей";
                    header("Refresh:2");
                  }else {
                      $this->error="Ошибка: Время бана должно быть числом";
                  }
                }
               if ($s) {
                   $this->result="
                       <form method=POST>
                         Забанить на: <input type=text name='time'> суток
                          <input type=submit value='OK'>
                        <input type=hidden name='action' value='ban'>
                   ";
                    for($i=0,$c=count($sel);$i<$c;$i++) {
                        $this->result.="<input type=hidden name='select[]' value='{$sel[$i]}'>";
                    }
                    $this->result.="</form>";
               }
            break;
            case"reban":
               $z=0;
               for($i=0,$c=count($sel);$i<$c;$i++) {
                   if (!$this->adm->reban($sel[$i])) {
                       break;
                   }
                   $z++;
               }
            $this->error=$z==count($sel)?"Все <b>$z</b> пользователей разбанены":"Ошибка: Разбанено только <b>$z</b> из <b>".count($sel)."</b> пользователей";
            header("Refresh:2");
            break;
        }
    }
    private function set_onpage() {
        $_SESSION['em_sorter']=$_POST['sort'];
    }
    private function set_sorter() {
        if (!preg_match("#[^0-9]+#",$_POST['onpage'])) {
            $_SESSION['em_onpage']=$_POST['onpage'];
        }
    }
    private function sql() {
        $n=($this->n-1)*$_SESSION['em_onpage'];
        if ($n<0) $n=0;
        return $this->db->query("
                       SELECT P.*,B.ip as `is_banned` FROM {$this->db->pref}_post as P
                        LEFT JOIN {$this->db->pref}_badip as B ON(B.fild=P.id_post)
                       ORDER BY {$_SESSION['em_sorter']}
                       LIMIT $n,{$_SESSION['em_onpage']}");
    }
    private function get_addfilds($arr){
      $res='<span style="color:red">Дополнительных полей нет</span>';
        if (!empty($arr)) {
            $res='';
            foreach($arr as $key=>$val) {
                $res.="<li><span style='color:red'>$key</span>: ".($val?$val:"Нет")."</li>";
            }
        }
     return $res;
    }
    private function get_sost($row) {
        $res='';
        if ($row['is_banned']) $res="<span style='color:red'>Забанен</span>";
        if (!$row['is_banned']) $res="<span style='color:green'>Активный</span>";
        return $res;
    }
    private function sortopt() {
        $res='';
        $arr=array(
             "P.data"=>"По дате",
             "P.data DESC"=>"По дате в обр. порядке",
             "P.name"=>"По имени",
             "P.name DESC"=>"По имени в обр. порядке",
             "is_banned DESC"=>"Забаненных Вверх",
        );
        foreach($arr as $key=>$val) {
            $res.="<option value='$key' ".($_SESSION['em_sorter']==$key?"selected":"").">$val</option>";
        }
        return $res;
    }
    private function actopt() {
        $res='';
        $arr=array(
             "del"=>"Удалить",
             "ban"=>"Забанить",
             "reban"=>"Разбанить",
        );
        foreach($arr as $key=>$val) {
            $res.="<option value='$key'>$val</option>";
        }
        return $res;
    }
    private function tpl() {
        $sql=$this->sql();
        $arr=array();
        if (mysql_num_rows($sql)) {
            while($row=$this->db->fetch_array($sql)) {
                $row['text']=r_replace($row['text']);
                $row['data']=date("d.m.Y H:i",$row['data']);
                $row['addfilds']=$this->get_addfilds(unserialize($row['addfilds']));
                $row['sost']=$this->get_sost($row);
                $arr[]=$row;
            }
        }
        $this->tpl->set('result',$arr);
        $this->tpl->set('onpage',$_SESSION['em_onpage']);
        $this->tpl->set('sortoption',$this->sortopt());
        $this->tpl->set('actoption',$this->actopt());
        $this->tpl->set("page",pager(
                                  array("page_num"=>$_SESSION['em_onpage'],"page_block"=>5),
                                  !$this->n?1:$this->n,
                                  "<a href='admin.php?do=editmsg&n={i}' class='main' >[{i}]</a>",
                                  "<b>[{i}]</b>",
                                  @$this->db->result($this->db->query("SELECT COUNT(*) FROM {$this->db->pref}_post"))
                                    ));
        return $this->tpl->load("admin_tpl/editmsg.tpl");
    }
}

?>
